home *** CD-ROM | disk | FTP | other *** search
- .title k11hex create k11prt.sav and/or k11rt4.sav from hex file
- .ident /2.23/
-
-
- ; 25-Oct-84 11:14:41 Brian Nelson
- ;
- ; Usage: run k11hex
- ; *k11prt=k11prt
- ; or *k11rt4=k11rt4
-
-
-
-
- .mcall .close ,.csigen,.exit ,.readw ,.writw ,.print
-
- .psect
-
- .macro sob reg ,dst
- dec reg
- bne dst
- .endm sob
-
- .macro mapch ch
- movb map(ch) ,ch
- .endm mapch
-
- map: .rept 48.
- .byte 377
- .endr
- .byte 0,1,2,3,4,5,6,7,8.,9.
- .byte 377,377,377,377,377,377,377
- .byte 10.,11.,12.,13.,14.,15.
- .rept 256.-70.
- .byte 377
- .endr
-
- .even
- rtwork: .blkw 10
- inblk: .word 0
- outblk: .word 0
- inpnt: .word 0
- outpnt: .word 0
- inbuff: .blkw 400
- outbuf: .blkw 400
-
- .enabl lc
- wrerr: .asciz /Write error on device/
- rderr: .asciz /Read error from file/
- badch: .asciz /Non HEX character read from input/
- badchk: .asciz /Checksum error/
- alldone:.asciz /All done/
- csibad: .asciz /Could not open the files on the command line/
- .even
- defext: .rad50 /HEX/
- .rad50 /SAVSAVSAV/
-
-
-
-
- convert:.csigen #handld,#defext,#0 ; get a command
- bcc 5$ ; ok
- .print #csibad ; no good
- .exit
-
- 5$: mov #77777 ,inpnt ; ensure fist getc call gets a block
- 10$: mov #40 ,r5 ; loop for the data record please
- clr r4 ; clear checksum if we use it
- 20$: call getc ; get a character
- bcs 60$ ; most likely all done
- mov r0 ,r3 ; save it
- mapch r3
- bpl 30$ ; char was ok
- .print #badch ; not ok
- 30$: asl r3 ; avoid mul for systems w/o EIS
- asl r3 ; avoid mul for systems w/o EIS
- asl r3 ; avoid mul for systems w/o EIS
- asl r3 ; avoid mul for systems w/o EIS
- call getc ; get the next one please
- bcs 80$ ; exit on i/o error please
- mapch r0 ; convert it
- bpl 40$ ; it was ok
- .print #badch ; error
- 40$: add r3 ,r0 ; add it in and copy the byte
- add r0 ,r4 ; add into simpleminded checksum
- call putc ; write it out
- bcs 70$ ; i/o error on write
- sob r5 ,20$ ; finished with the read
- call getchk ; read the checksum
- cmp r0 ,r4 ; do they match ?
- beq 50$ ; yes
- .print #badchk ; no, print error and exit
- 50$: br 10$ ; read the next record now
-
- 60$: call close ; close up and exit
- br 100$ ; bye
-
- 70$: .print #wrerr ; write error
- br 100$ ; exit
- 80$: .print #rderr ; a read error
- br 100$ ;
-
- 100$: .print #alldone
- .exit
-
-
- getchk: clr r3
- call getc
- bcs 100$
- call getc
- call getc
- mov #4 ,r2
- 10$: call getc
- asl r3 ; avoid mul for systems w/o EIS
- asl r3 ; avoid mul for systems w/o EIS
- asl r3 ; avoid mul for systems w/o EIS
- asl r3 ; avoid mul for systems w/o EIS
- mapch r0
- add r0 ,r3
- sob r2 ,10$
- 100$: mov r3 ,r0
- return
-
-
-
- getc: call .getc ; get the next character
- bcs 100$ ; oops
- cmpb r0 ,#15 ; carriage return or less?
- blos getc ; yes, get the next character then
- clc ; no, return it
- 100$: return ; exit with c bit error code
-
- .getc: cmp inpnt ,#1000
- blo 10$
- clr inpnt ; clear the buffer offset also
- .readw #rtwork,#3,#inbuff,#400,inblk
- bcs 100$ ; end of file
- inc inblk ; next time the next block please
- 10$: mov inpnt ,r0 ; get the current buffer offset
- inc inpnt ; + 1
- movb inbuff(r0),r0 ; and return the character
- clc ; success
- 100$: return ; exit with success in 'c' bit
-
-
- putc: cmp outpnt ,#1000 ; room for more output data
- blo 10$
- clr outpnt ; clear the buffer offset also
- mov r0 ,-(sp) ; save the character being put
- .writw #rtwork,#0,#outbuff,#400,outblk
- mov (sp)+ ,r0 ; restore that character please
- bcs 100$ ; end of file
- inc outblk ; next time the next block please
- 10$: mov outpnt ,r1 ; get the current buffer offset
- inc outpnt ; + 1
- movb r0 ,outbuff(r1) ; and return the character
- clc ; success
- 100$: return ; exit with success in 'c' bit
-
-
- close: tst outpnt ; anything to dump out
- beq 20$ ; no, should not be
- mov outblk ,r2 ; save current output block #
- 10$: cmp r2 ,outblk ; did it dump it's buffer?
- bne 20$ ; yes
- clr r0 ; yes, dump a bunch of nulls out
- call putc ; until putc clears the pointer
- br 10$
- 20$: .close #0 ; close the two file now
- .close #3 ; output also please
- return
-
- handld: .blkw 500
-
- .end convert
-